/**
在 Node.js 中，文件的写入操作主要通过  fs  模块来实现。该模块提供了多种方法来写入文件，包括异步和同步方式。以下是对文件写入的说明和总结：
  1. 文件写入方法
  Node.js 的  fs  模块提供了几种主要的文件写入方法：
   1.1 异步写入
  -  fs.writeFile(path, data, options, callback) :
    - 参数:
      -  path : 要写入的文件路径。
      -  data : 要写入的内容，可以是字符串或 Buffer。
      -  options : 可选参数，通常用于指定编码（如 'utf8'）和文件创建模式（如  flag: 'a'  表示追加）。
      -  callback : 回调函数，接受一个参数：错误对象。
    - 示例:
    const fs = require('fs');

    fs.writeFile('example.txt', 'Hello, Node.js!', 'utf8', (err) => {
        if (err) {
            console.error('写入文件失败:', err);
            return;
        }
        console.log('文件写入成功');
    });
   1.2 同步写入
  -  fs.writeFileSync(path, data, options) :
    - 参数:
      -  path : 要写入的文件路径。
      -  data : 要写入的内容，可以是字符串或 Buffer。
      -  options : 可选参数，通常用于指定编码。
    - 返回值: 无返回值。
    - 示例:
    const fs = require('fs');

    try {
        fs.writeFileSync('example.txt', 'Hello, Node.js!', 'utf8');
        console.log('文件写入成功');
    } catch (err) {
        console.error('写入文件失败:', err);
    }
   1.3 追加写入
  -  fs.appendFile(path, data, options, callback) :
    - 参数:
      -  path : 要写入的文件路径。
      -  data : 要追加的内容，可以是字符串或 Buffer。
      -  options : 可选参数，通常用于指定编码。
      -  callback : 回调函数，接受一个参数：错误对象。
    - 示例:
    const fs = require('fs');

    fs.appendFile('example.txt', '\nAdditional content.', 'utf8', (err) => {
        if (err) {
            console.error('追加写入失败:', err);
            return;
        }
        console.log('文件追加成功');
    });
   1.4 同步追加写入
  -  fs.appendFileSync(path, data, options) :
    - 参数:
      -  path : 要写入的文件路径。
      -  data : 要追加的内容，可以是字符串或 Buffer。
      -  options : 可选参数，通常用于指定编码。
    - 示例:
    const fs = require('fs');

    try {
        fs.appendFileSync('example.txt', '\nAdditional content.', 'utf8');
        console.log('文件追加成功');
    } catch (err) {
        console.error('追加写入失败:', err);
    }
  2. 错误处理
  在进行文件写入操作时，错误处理非常重要。无论是异步还是同步方法，都应考虑文件权限不足、路径错误等可能导致的错误。

  3. 使用场景
  - 文件写入操作常用于日志记录、配置文件更新、数据存储等场景。

  4. 总结
  Node.js 的  fs  模块提供了多种灵活的文件写入方法，开发者可以根据需要选择异步或同步方式。异步方法适合处理大量写入操作，而同步方法则适合简单的、一次性的写入任务。掌握这些方法后，开发者可以高效地进行文件内容的写入和管理。
 */
const fs = require("fs");

const content = "hello writeFile, 你好 writeFile!";

// 1. 同步写入
/**
 flag: 
    1. "w" : 如果文件不存在，则创建文件。如果文件存在，则覆盖文件内容。
    2. "a" : 如果文件不存在，则创建文件。如果文件存在，则在文件末尾追加内容。
    3. "r+" : 如果文件不存在，则抛出错误。如果文件存在，则读取和写入文件。
    4. "w+" : 如果文件不存在，则创建文件。如果文件存在，则覆盖文件内容并允许读取和写入。
    5. "a+" : 如果文件不存在，则创建文件。如果文件存在，则在文件末尾追加内容并允许读取和写入。
 */

// 1. 同步写入 + 创建文件
try {
  fs.writeFileSync("./file/writeFile.txt", content, {
    encoding: "utf-8",
    flag: "a", // 追加模式
  });
  console.log("文件写入成功");
} catch (err) {
  console.error("文件写入失败:", err);
}

// 2. 异步写入 + 创建文件
fs.writeFile(
  "./file/writeFile.txt",
  content,
  {
    encoding: "utf-8",
    flag: "a", // 追加模式
  },
  (err) => {
    if (err) {
      console.error("文件写入失败:", err);
    } else {
      console.log("文件写入成功");
    }
  }
);

// 3. Promise 写入 + 创建文件
fs.promises.writeFile("./file/writeFile.txt", content, {
  encoding: "utf-8",
  flag: "a", // 追加模式
});
